return TRUE;
}
+void
+_gdk_broadway_window_grab_check_destroy (GdkWindow *window)
+{
+ GdkDisplay *display = gdk_window_get_display (window);
+ GdkBroadwayDisplay *broadway_display;
+ GdkDeviceManager *device_manager;
+ GdkDeviceGrabInfo *grab;
+ GList *devices, *d;
+
+ broadway_display = GDK_BROADWAY_DISPLAY (display);
+
+ device_manager = gdk_display_get_device_manager (display);
+
+ /* Get all devices */
+ devices = gdk_device_manager_list_devices (device_manager, GDK_DEVICE_TYPE_MASTER);
+
+ for (d = devices; d; d = d->next)
+ {
+ /* Make sure there is no lasting grab in this native window */
+ grab = _gdk_display_get_last_device_grab (display, d->data);
+
+ if (grab && grab->native_window == window)
+ {
+ grab->serial_end = grab->serial_start;
+ grab->implicit_ungrab = TRUE;
+
+ broadway_display->pointer_grab_window = NULL;
+ }
+
+ }
+
+ g_list_free (devices);
+}
+
+
static GdkGrabStatus
gdk_broadway_device_grab (GdkDevice *device,
GdkWindow *window,
void _gdk_broadway_window_delete_property (GdkWindow *window,
GdkAtom property);
-void _gdk_broadway_selection_window_destroyed (GdkWindow *window);
+
+void _gdk_broadway_selection_window_destroyed (GdkWindow *window);
+void _gdk_broadway_window_grab_check_destroy (GdkWindow *window);
void _gdk_keymap_keys_changed (GdkDisplay *display);
gint _gdk_broadway_get_group_for_state (GdkDisplay *display,
wrapper = impl->wrapper;
+ _gdk_broadway_window_grab_check_destroy (wrapper);
+
broadway_display = GDK_BROADWAY_DISPLAY (gdk_window_get_display (impl->wrapper));
if (broadway_display->mouse_in_toplevel == GDK_WINDOW (wrapper))
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
_gdk_broadway_selection_window_destroyed (window);
+ _gdk_broadway_window_grab_check_destroy (window);
if (impl->ref_surface)
{